home *** CD-ROM | disk | FTP | other *** search
- #!/usr/app/bin/perl
-
- eval 'exec /usr/app/bin/perl -S $0 ${1+"$@"}'
- if 0; # not running under some shell
- #
- # Gimp yin/yang symbol plugin for The Gimp. Extract documentation by running
- # "perldoc" on this plugin, or by using the pod utilities (pod2man, pod2html,
- # etc.)
- #
- # Written by Aaron Sherman, (c) 1998
- # 04-22-2001, peter@kirchgessner.net: fix problems with functions
- # that changed number of arguments
-
- use Gimp qw(:auto __ N_);
- use Gimp::Fu;
-
- # Main function. Takes width, height, do_eyes (toggle), eye_images (toggle),
- # white_eye_image (filename) and black_eye_image (filename).
- # Creates a stand-alone image with a yin-yang symbol in black and white.
- sub yinyang {
- my $width = shift;
- my $height = shift;
- my $do_eyes = shift;
- my $eye_images = shift;
- my $white_eye_image = shift;
- my $black_eye_image = shift;
- my $aa = shift;
-
- # Create new image
- my $img = gimp_image_new($width,$height,0);
- my $layer = gimp_layer_new($img,$width,$height,1,"Yin/Yang",100,0);
- gimp_image_add_layer($img,$layer,0);
- gimp_image_set_active_layer($img,$layer);
- my $draw = gimp_image_active_drawable($img);
- my $oldcolor = gimp_palette_get_foreground();
- gimp_palette_set_foreground([0,0,0]);
- gimp_selection_all($img);
- gimp_bucket_fill($draw,0,0,100,0,0,0,0);
-
- # Create the yin-yang shape
- #gimp_selection_invert($img);
- gimp_selection_none($img);
- gimp_rect_select($img,0,0,$width/2,$height,0,0,0);
- gimp_ellipse_select($img,$width/2-$width/4,0,$width/2,
- int($height/2),0,$aa,0,0);
- gimp_ellipse_select($img,$width/2-$width/4,$height/2,
- $width/2, $height/2, 1, $aa, 0, 0);
- gimp_palette_set_foreground([255,255,255]);
- gimp_bucket_fill($draw,0,0,100,0,0,0,0);
-
- # Cut away all but the central circle
- gimp_ellipse_select($img,0,0,$width,$height,2,$aa,0,0);
- gimp_selection_invert($img);
- gimp_edit_clear($draw);
-
- # Create the "eyes"
- if ($do_eyes) {
- my $x1 = $width/2-$width/16;
- my $y1 = $height/2-$height/4-$height/16;
- my $x2 = $x1;
- my $y2 = $height/2+$height/4-$height/16;
- my $eyewidth = $width/8;
- my $eyeheight = $height/8;
- insert_eye($img,$eye_images,$white_eye_image,[0,0,0],$x1,$y1,$eyewidth,
- $eyeheight,$draw,$aa);
- insert_eye($img,$eye_images,$black_eye_image,[255,255,255],$x2,$y2,
- $eyewidth,$eyeheight,$draw,$aa);
- }
-
- # Finish up
- gimp_palette_set_foreground($oldcolor);
- gimp_selection_none($img);
-
- $img;
- }
-
- # This subroutine inserts an "eye" (a dot in the center of the cicular
- # part of each of the halves of the yin-yang). The eye is either
- # a solid dot of the opposite color from that half of the yin-yang or
- # an image, which is loaded and scaled to fit.
- sub insert_eye {
- my $img = shift;
- my $do_image = shift;
- my $file = shift;
- my $color = shift;
- my $x = shift;
- my $y = shift;
- my $width = shift;
- my $height = shift;
- my $draw = shift;
- my $aa = shift;
-
- gimp_ellipse_select($img,$x,$y,$width,$height,2,$aa,0,0);
- gimp_palette_set_foreground($color);
- if ($do_image) {
- my $eye = gimp_file_load(NON_INTERACTIVE,$file,$file);
- gimp_image_scale($eye,$width,$height);
- gimp_selection_all($eye);
- my $eyedraw = gimp_image_active_drawable($eye);
- gimp_edit_copy($eyedraw);
- my $float = gimp_edit_paste($draw,1);
- gimp_floating_sel_anchor($float);
- gimp_image_delete($eye);
- } else {
- gimp_bucket_fill($draw,0,0,100,0,0,0,0);
- }
- }
-
- # Register with The Gimp
- register("yinyang", "Render a stand-alone Yin/Yang image",
- "Renders a black-and-white Yin/Yang symbol optionally
- with \"eyes\" that may optionally be images.",
- "Aaron Sherman", "(c) 1998, Aaron Sherman",
- "1999b", N_"<Toolbox>/Xtns/Render/Yin-Yang...", undef,
- [
- [PF_INT32, "width", "Width", 256],
- [PF_INT32, "height", "Height", 256],
- [PF_TOGGLE, "insert_eyes", "", 1],
- [PF_TOGGLE, "eyes_are_images", "", 0],
- [PF_STRING, "top_eye_filename", "eye 1", ""],
- [PF_STRING, "bottom_eye_filename", "eye 2", ""],
- [PF_TOGGLE, "anti_aliasing", "", 1]
- ],
- [PF_IMAGE],
- \&yinyang);
-
- exit main;
-
- __END__
-
- =head1 NAME
-
- yinyang
-
- =head1 SYNOPSIS
-
- yinyang
-
- =head1 DESCRIPTION
-
- B<yinyang> is a B<Gimp> plugin. It generates a Yin/Yang symbol, which
- is a Chinese symbol of duality. It takes as parameters (provided by the
- Gimp user interface) the width and height of the resulting image;
- a toggle to indicate if "eyes" should be inserted (see I<EYES>);
- a toggle to indicate if the eyes should be images that are
- loaded separately; the two filenames for the eyes and a toggle to
- indicate if anti-aliasing should be used.
-
- =head1 EYES
-
- The "eyes" are normally either black or white dots in the middle of the
- circular regions of the two halves of the Yin and Yang. If you like
- you can load these eyes from another image.
-
- =head1 IDEAS
-
- Here are some thoughts on how the plugin could be used:
-
- =over 5
-
- =item *
-
- Use as a low-opacity layer over an image to indicate duality or harmony.
-
- =item *
-
- Use to replace circular objects in an image (e.g. eyes, street signs,
- the sun, etc.)
-
- =item *
-
- Map two opposed or dualistic images. One into the black region, one
- into the white. For a really cool look, make the eyes show a peice of
- the other image.
-
- =item *
-
- Dip in 1 tbsp chunky peanut butter, 1 tbsp rice vinegar, 1 tbsp
- lime juice, 1 dash black pepper. Eat to taste.
-
- =back
-
- =head1 AUTHOR
-
- Written by Aaron Sherman <ajs@ajs.com>, (c) 1998.
-
- =cut
-